#include<iostream>
#include<vector>
using namespace std;

int cnt[5];//a用1来代替，cnt[1]是1的个数
int vis[13][13]={0};//vis[i][j]表示i和j要相同
vector<int> path;
int ret=0;

bool judge(int pos,int x)//要求相同但不相同
{
    for(int i=0;i<pos;i++)
    {
        if(vis[i+1][pos+1] &&x!=path[i])//下标为i应该是第i+1个数
        {
            return true;
        }
    }
    return false;
    
}


void dfs(int i)
{
    if(i==12)
    {
        ret++;
        return ;
    }
    for(int j=1;j<=4;j++)
    {
        if(cnt[j]==0) continue;
        if(judge(i,j))
        {
            continue;
        }
        path.push_back(j);
        cnt[j]--;
        dfs(i+1);
        cnt[j]++;
        path.pop_back();
    }
}

int main()
{
    for(int i=1;i<=4;i++) cin>>cnt[i];
    int m;
    cin>>m;
    for(int j=0;j<m;j++)
    {
        int x,y;
        cin>>x>>y;
        vis[x][y]=vis[y][x]=1;
    }

    dfs(0);
    cout<<ret;
    
    return 0;
}